/*
 * @(#)BusinessService.java 1.0 2014/02/14
 *
 * Copyright (c) 2014 SinoSoft Refactored by filon51.
 * All rights reserved.
 *
 */
package com.sinosoft.cloud.dp.thread;

import java.util.HashMap;

/**
 * 业务服务的接口类。这个接口的主要目标，是希望业务服务类可以方便地 使用多线程的功能。
 * 多线程的底层支持类，使用的是Doug lea提供的多线程工具包。
 * 这个包已经被JDK 1.5所采用，并集成到JDK中。 这个接口的设计思想，是希望程序员在编写服务类时，可以关注于业务逻辑本身，
 * 而不用过多关注服务类本身是会被单线程运行，还是多线程运行。
 * 在一个业务服务类被编写出来之后，它被单线程运行，还是被多线程运行，是在运行时决定的。
 * 可能是在程序中写死的，也可能是通过配置参数动态确定的。
 * 这样的设计，不仅有 利于程序员编写程序，也有利于整个系统的整体性能调整，使得动态调整成为可能。
 *
 * @author zhouping 2008-10-11
 *
 */
public interface BusinessService {
	/**
	 * 待处理数据遍历的方法。是否还有待处理数据。 程序员可以自由控制待处理数据的明细度，
	 * 例如，可以将某一个具体的保单号当做一个待处理数据，在后续的处理中，处理一个个保单数据。
	 * 也可以将一个 管理机构当做一个待处理数据，在后续的处理中，处理一个个管理机构下的所有保单。
	 */
	public void prepareElement();

	public boolean hasMoreElement();

	public HashMap nextElement();

	/**
	 * 处理一个待处理数据，这是后台服务类的具体业务逻辑
	 */
	public HashMap processOneElement(HashMap aElement);

	/**
	 * 保存一个计算后的结果。对于计算结果，可能会批保存。
	 */
	public boolean saveOneElement(HashMap aElement);

	public boolean flushAllElements();

	/**
	 * 两个事件响应函数
	 */
	public void onInitialiseResource();

	public void onReleaseResource();

	/**
	 * 处理异常
	 */
	public void dealException();

	/**
	 * 出现异常时设置异常标记
	 * @param bExceptionFlag
	 */
	public void setExceptionFlag(boolean bExceptionFlag);

	/**
	 * 判断是否有线程出现异常
	 * @return
	 */
	public boolean getExceptionFlag();
}